/**
 * 首先必须明确，实现哈希路由到底是在问什么？
也就是哈希路由的本质是什么。对于这道题来说，它实际上是想问：在页面的哈希值发生变化的时候能够执行预先存储的回调函数
所以需要实现两个功能：
预先存储路由和对应的回调函数

当路由地址发生变化的时候能够找到当前的url对应的回调并执行
根据上面的分析，需要构件的类中应该包括如下的属性和方法：
routes: 是一个哈希表，存放的是路由地址和回调之间的关系
currentHash：当前的路由地址
storeRoute (path, cb)：将路由地址和回调函数对应起来
freshRoute ()：调用当前路由地址对应的回调函数
最后监听window上的load时间和hashchange事件，当事件发生的时候调用freshRoute方法
 */
class Route {
  constructor() {
    this.currentHash = "";

    this.routes = {};

    window.addEventListener("load", this.freshRoute);
    window.addEventListener("hashchange", this.freshRoute);
  }

  // 预置回调
  storeRoute(url, cb) {
    this.routes[url] = cb ?? Function();
  }

  // 调用当前哈希的回调
  freshRoute() {
    this.currentHash = location.pathname || "/";
    this.routes[this.currentHash]();
  }
}
